package br.com.consignum;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
  
@SuppressWarnings("serial")  
public class MatrixJackson extends JFrame  
{  
  
    private static final int FONT_SIZE = 20;  
    private static final int NUMBER_OF_REPEATS = 10;  
    private static final String TEXT = new String("A   Y HL  K      R    J     x     o     y q     s    S 0    j   1    p      y  u      s    z     s   q   a   ");  
    private static JPanel panel = new JPanel(null);  
    private static Random random = new Random();  
    private static JLabel label[] = new JLabel[NUMBER_OF_REPEATS];  
  
    public MatrixJackson()  
    {  
        this.add(panel);  
        panel.setBackground(Color.BLACK);  
    }  
  
    public void scroll()  
    {  
        //array to hold x coordinates for the labels   
        int[] random_x = new int[NUMBER_OF_REPEATS];  
        //create an infinite loop   
        while (true)  
        {  
            //initialise all the labels to random characters   
            for (int i = 0; i < NUMBER_OF_REPEATS; i++)  
            {  
                int character_initial = random.nextInt(TEXT.length());  
                random_x[i] = random.nextInt(panel.getWidth() / FONT_SIZE) - 1;  
                label[i] = new JLabel("" + TEXT.charAt(character_initial));  
                panel.add(label[i]);  
                label[i].setFont(new Font("monospaced", Font.PLAIN, FONT_SIZE));  
                label[i].setForeground(new Color(0, 255, 0));  
            }  
            // change the text of the labels and their position   
            for (int j = 0; j < (panel.getHeight() / FONT_SIZE) * 2; j++)  
            {  
                int character = random.nextInt(TEXT.length());  
                //move each character   
                for (int i = 0; i < NUMBER_OF_REPEATS; i++)  
                {  
                    label[i].setBounds(random_x[i] * FONT_SIZE, j * (FONT_SIZE / 2), FONT_SIZE, FONT_SIZE);  
                    label[i].setText("" + TEXT.charAt(character));  
                    label[i].setForeground(new Color(0, 255 - (j * 5), 0));  
                    for (int k = 0; k < NUMBER_OF_REPEATS; k++)  
                    {  
                        int character_initial = random.nextInt(TEXT.length());  
                        random_x[k] = random.nextInt(panel.getWidth() / FONT_SIZE) - 1;  
                        label[k] = new JLabel("" + TEXT.charAt(character_initial));  
                        panel.add(label[k]);  
                        label[k].setFont(new Font("monospaced", Font.PLAIN, FONT_SIZE));  
                        label[k].setForeground(new Color(0, 255, 0));  
                        Color colour = label[k].getForeground();  
                        if (colour.getGreen() <= 80)  
                        {  
                            panel.remove(label[k]);  
                            k = (panel.getHeight() / FONT_SIZE) * 2;  
                        }  
                    }  
                }  
                // pause between each character   
                try  
                {  
                    Thread.sleep(15);  
                }  
                catch (Exception e)  
                {  
                }  
            }  
        }  
    }  
  
    public static void main(String[] args)  
    {  
    	 final MatrixJackson frame = new MatrixJackson();  
         frame.setVisible(true); 
         frame.setResizable(true);  
         frame.setMinimumSize(new Dimension(300, 200));  
        frame.setLocationRelativeTo(null);  
         frame.setTitle("Jackson Silva  - Hacker");  
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
         frame.scroll();  
    }  
} 